package com.example.ssmxuankeback.enums;

import org.springframework.http.HttpStatus;

/**
 * 错误码枚举（构造函数版本）
 * 包含错误码、错误信息模板、HTTP状态码三要素
 */
public enum ErrorCodeEnum {
    // 枚举常量定义（需显式调用构造函数）
    USER_NOT_FOUND("U404", "用户不存在: %s", HttpStatus.NOT_FOUND),
    INVALID_PARAM("P400", "参数校验失败: %s", HttpStatus.BAD_REQUEST),
    AUTH_FAILED("A401", "认证失败: %s", HttpStatus.UNAUTHORIZED);

    // 枚举字段声明
    private final String code;         // 业务错误码
    private final String message;      // 带占位符的错误信息
    private final HttpStatus httpStatus;// 对应HTTP状态码

    /**
     * 枚举构造函数（默认private修饰）
     * @param code      业务错误码，如"U404"
     * @param message   错误信息模板，支持String.format
     * @param httpStatus HTTP状态码
     */
    ErrorCodeEnum(String code, String message, HttpStatus httpStatus) {
        this.code = code;
        this.message = message;
        this.httpStatus = httpStatus;
    }

    // Getter方法（无Setter确保不可变性）
    public String getCode() { return code; }
    public String getMessage() { return message; }
    public HttpStatus getHttpStatus() { return httpStatus; }

    /**
     * 格式化错误信息（支持动态参数）
     * @param params 动态参数，匹配message中的%s占位符
     * @return 格式化后的完整错误信息
     */
    public String formatMessage(Object... params) {
        return String.format(message, params);
    }
}